package com.tanhua.server.controller;

import com.tanhua.model.domain.UserInfo;
import com.tanhua.model.vo.UserInfoVo;
import com.tanhua.server.interceptor.ThreadLocalUtils;
import com.tanhua.server.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequestMapping("/users")
public class UsersController {


    @Autowired
    private UsersService service;

    /**
     *
     * 根据用户id查询UserInfo
     * 1.请求路径：/users
     * 2.请求参数：请求头的Authorization：token(必须),用户id：userID(非必须)
     * 3.响应数据：UserInfo
     */
    @GetMapping()
    public ResponseEntity selectUserInfoByUserId(@RequestHeader("Authorization") String token,
                                                 Long userId){

          //1.校验token合法性已经在拦截器中完成
          // 2.获取token中携带的UserID

        Long id = ThreadLocalUtils.getUserId();
        if(userId == null){
            //如果没有传递过来参数userId，把token携带的id赋值给它
             userId =Long.valueOf(id);
        }

        //3.调用UsersService完成数据查询
        UserInfoVo userInfoVo = service.selectByid(userId);

        return ResponseEntity.ok(userInfoVo);
    }

    /**
     *
     * 根据用户id更新修改用户资料
     *
     * 1.请求路径：/users
     * 2.请求参数：请求头的Authorization：token(必须)，UserInfo(实体类)
     * 3.响应数据：无
     */
    @PutMapping
    public ResponseEntity updateUserInfo(@RequestBody UserInfo userInfo,
                                         @RequestHeader("Authorization") String token){

        //2.获取token携带的用户id设置给UserInfo
        Long id = ThreadLocalUtils.getUserId();
        userInfo.setId(Long.valueOf(id));
        //3.调用service完成信息修改
        service.updateUserInfo(userInfo);

        return ResponseEntity.ok(null);

    }


    /**    更换头像
     * 1.请求路径：/users/header
     * 2.请求方式：post
     * 3.请求参数：请求头中的token，Authorization；请求体中的图片文件，headPhoto
     * 4.响应数据：无
     */
    @PostMapping("/header")
    public ResponseEntity updateHeaderPhoto(MultipartFile headPhoto,
                                            @RequestHeader("Authorization") String token) throws IOException {

        //1.token的合法性在拦截器中已经完成
        //2.token的解析也已在拦截器中完成，调用ThreadLocalUtils获取User获取id
        Long userId = ThreadLocalUtils.getUserId();
        //3.调用业务层完成用户头像更新
        service.updateHeaderPhoto(headPhoto,userId);

        return ResponseEntity.ok(null);

    }



}
